﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using persistencia;
using System.Data.Objects;
using System.Data;

namespace GIO.servicios
{
    public class ServicioUsuario
    {
        public Boolean agregarUsuario(usuario u)
        {
            if (u != null)
            {
                try
                {
                    gioEntities e = new gioEntities();
                    e.AddTousuario(u);
                    e.SaveChanges();
                }
                catch (NotSupportedException)
                {

                }
                return true;
            }
            return false;
        }

        public usuario getUsuarioById(int usuarioAAsignar)
        {
            usuario ret = new usuario();
            using (gioEntities e = new gioEntities())
            {
                try
                {
                    IEnumerable<KeyValuePair<string, object>> entityKeyValues = new KeyValuePair<string, object>[]
               { 
               new KeyValuePair<string, object>("id", usuarioAAsignar) 
               };
                    EntityKey identificadorUsuario = new EntityKey("gioEntities.usuario", entityKeyValues);
                    ret = (usuario)e.GetObjectByKey(identificadorUsuario);
                }
                catch (ObjectNotFoundException ex)
                {
                    ex.ToString();
                }
                return ret;
            }
        }

        public int getUsuarioMenosTktsAsignados(int idClasIncidente)
        {
            int menor = Int32.MaxValue;
            int retorno = 0;
            using (gioEntities e = new gioEntities())
            {

                List<clasificacion_incidente_x_usuario> usuariosCalificados = new List<clasificacion_incidente_x_usuario>();

                usuariosCalificados = getUsuariosCalificados(idClasIncidente);
                foreach (clasificacion_incidente_x_usuario clasIncidente in usuariosCalificados)
                {
                    var count = e.incidente.Count(i => i.id_usuario_sol == clasIncidente.id_usuario && i.estado.id == 4);
                    if (count < menor)
                    {
                        menor = count;
                        retorno = clasIncidente.id_usuario;
                    }

                }
            }
            return retorno;

        }

        private List<clasificacion_incidente_x_usuario> getUsuariosCalificados(int idClasIncidente)
        {
            List<clasificacion_incidente_x_usuario> ciu = new List<clasificacion_incidente_x_usuario>();
            try
            {
                using (gioEntities e = new gioEntities())
                {
                    ObjectQuery<clasificacion_incidente_x_usuario> query = e.CreateQuery<clasificacion_incidente_x_usuario>
                         ("SELECT VALUE ciu FROM clasificacion_incidente_x_usuario AS ciu WHERE ciu.id_Clasificacion_incidente = @idClasIncidente",
                         new ObjectParameter("idClasIncidente", idClasIncidente));
                    foreach (clasificacion_incidente_x_usuario clasIncidente in query)
                    {
                        ciu.Add(clasIncidente);
                    }
                }

            }
            catch (Exception ex)
            {
                ex.ToString();
            }
            return ciu;
        }
    }
}